package com.example.cxx.Utils;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class ChromeDriverUtil {
    /**
     * 浏览器后台运行，向下滑动
     * @param url
     * @return
     */
    public static Document getDocument(String url){
        Document doc = null;
        //可使用的浏览器有：IE浏览器（webdriver.ie.driver）
        //火狐浏览器  (webdriver.gecko.driver)
        //谷歌浏览器 (webdriver.chrome.driver)
        //                  是使用那个浏览器                                   chromedriver所在的位置
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\cxx\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");
    // 设置无头浏览器，这样就不会弹出浏览器窗口
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--headless");
        Long scrollSize = 1000L;
        WebDriver webDriver = new ChromeDriver(chromeOptions);
        webDriver.get(url);
        //设置浏览器的宽高
        Dimension dimension = new Dimension(1000, scrollSize.intValue());
        webDriver.manage().window().setSize(dimension);
        Document html;
        //获取JS执行器，可以执行js代码来控制页面
        JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
        //获取页面的高度
        Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
        //因为要模拟鼠标滚动浏览网页的效果，所以设置了每次滚动的高度，然后通过整个页面的高度计算出股东的次数
        Long loopNum = scrollHeight/scrollSize;
        loopNum = loopNum+1;
        for(int i =0 ; i < loopNum; i++){
            Long start = i*scrollSize;
            Long end = (i+1)*scrollSize;
            //根据滚动的次数，依次滚动页面，为了图片能加载完全，停留1秒钟
            driver_js.executeScript("scroll("+start+","+end+")");
        }
        //返回页面全部内容
        html =Jsoup.parse((String) driver_js.executeScript("return document.documentElement.outerHTML"));
        webDriver.close();
        System.out.println(html);
        return html;
    }
}
